#include "C:\\Users\\LYHBYKD\\Desktop\\aomf.h"
using namespace std;
xy fw[30]={0},flag[30]={0};
double zl[30]={0};
Rgb cl[30]={0};
bool b[30]={0};
int n=0;
void bz(xy a,Rgb col){
	HDC hdc=GetDC(0);
    int x,y,d,r=0,big=rand()%150+26;
    while(r<big){
    	x=0;y=r;d=1-r;
	    SetPixelV(hdc,x,y,RGB(col.r,col.g,col.b));
	    while(x<=y){
	        if(d<0){
	           	d+=2*x+3;
			} 
   	        else{
	           	d+=2*(x-y)+5;
				y--;
	        }
	        x++;
	        if(rand()%2){
	        	if(col.r>col.g&&col.r>col.b&&col.r<255){
		        	col.r++;
				}
				else if(col.b>col.g&&col.b<255){
					col.b++;
				}
				else{
					col.g++;
				}
			}
	        rand()%10?0:SetPixelV(hdc,x+a.x,y+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	        rand()%10?0:SetPixelV(hdc,-x+a.x,y+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	        rand()%10?0:SetPixelV(hdc,-x+a.x,-y+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	        rand()%10?0:SetPixelV(hdc,x+a.x,-y+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	        rand()%10?0:SetPixelV(hdc,y+a.x,x+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	        rand()%10?0:SetPixelV(hdc,-y+a.x,x+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	        rand()%10?0:SetPixelV(hdc,-y+a.x,-x+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	        rand()%10?0:SetPixelV(hdc,y+a.x,-x+a.y,rand()%10?RGB(col.r,col.g,col.b):RGB(0,0,0));
	    }
	    if(col.r>col.g&&col.r>col.b&&col.r<255){
		   	col.r+=10;
		}
		else if(col.b>col.g&&col.b<255){
			col.b+=10;
		}
		else{
			col.g+=10;
		}
	    r++;
	}
	r=0;
	while(r<big){
    	x=0;y=r;d=1-r;
	    SetPixelV(hdc,x,y,RGB(col.r,col.g,col.b));
	    while(x<=y){
	        if(d<0){
	           	d+=2*x+3;
			} 
   	        else{
	           	d+=2*(x-y)+5;
				y--;
	        }
	        x++;
	        SetPixelV(hdc,x+a.x,y+a.y,RGB(0,0,0));
	        SetPixelV(hdc,-x+a.x,y+a.y,RGB(0,0,0));
	        SetPixelV(hdc,-x+a.x,-y+a.y,RGB(0,0,0));
	        SetPixelV(hdc,x+a.x,-y+a.y,RGB(0,0,0));
	        SetPixelV(hdc,y+a.x,x+a.y,RGB(0,0,0));
	        SetPixelV(hdc,-y+a.x,x+a.y,RGB(0,0,0));
	        SetPixelV(hdc,-y+a.x,-x+a.y,RGB(0,0,0));
	        SetPixelV(hdc,y+a.x,-x+a.y,RGB(0,0,0));
	    }
	    r++;
	}
}
int main(){	
	FreeConsole();
	board({Desktop().width/2,Desktop().height/2},Desktop().width,Desktop().height,{0,0,0});
	srand(time(NULL));
	xy start={Desktop().height,Desktop().width/2};
	int time=rand()%(rand()%1000),cnt=0;
	clock_t start_=clock();
	while(1){
		cnt++;
		for(int i=0;i<n;i++){
			if(b[i]){
				round(fw[i],5,{0,0,0},0);
				fw[i].x+=flag[i].x;
				fw[i].y+=flag[i].y+zl[i];
				round(fw[i],5,cl[i],0);
				zl[i]+=rand()%2*(rand()%2?0.1:0.05);
				if(fw[i].x<=0||fw[i].x>=Desktop().width-2||fw[i].y>=Desktop().height-2||fw[i].y<=0||!rand()%2){
					bz(fw[i],cl[i]);
					round(fw[i],5,{0,0,0},0);
					b[i]=b[n];
					fw[i]=fw[n];
					cl[i]=cl[n];
					i--;
					n--;
				}
			}
		}
		if(cnt==time){
			fw[n]=start;
			flag[n]={rand()%7-3,-rand()%10};
			zl[n]=-rand()%6*0.1;
			if(!flag[n].x&&!flag[n].y){
				if(rand()%2){
					flag[n].x=rand()%3+1;
				}
				else{
					flag[n].y=rand()%3+1;
				}
			}
			b[n]=1;
			cl[n]={rand()%220+36,rand()%220+36,rand()%220+36};
			n++;
			time=rand()%(rand()%1000);
			cnt=0;
		}
		if(longmousedown(5,'w')){
			return 0;
		}
		if(clock()-start_>=60000){
			board({Desktop().width/2,Desktop().height/2},Desktop().width,Desktop().height,{0,0,0});
			start_=clock();
		}
	}
	return 0;
}
